#ifndef ENTITY_H
#define ENTITY_H

#include <defs/export.h>
#include <defs/global.h>

#include <QUuid>

namespace Opl
{
	namespace Core
	{


		/*!
		  Class represent base data, object or any other element in module eg Gui elements, Contacts etc.
		  */
		O_PRIVATE_DECLARE(Entity);
		class CORE_EXPORT Entity
		{

			public:
				Entity();
				virtual ~Entity();

				typedef QUuid EntityId;

				/*!
				  Unique Id for current application instance
				  */
				const EntityId& unique()const;

				/*!
				  Create DateTime
				  */
				const QDateTime& stamp()const;

				/*!
				  Retrieve custom data
				  */
				const QVariant& tag()const;

				/*!
				  set user custom data
				  */
				void setTag(const QVariant& data);

				/*!
				  string representation this object
				  */
				virtual QString toString();
			private:
				O_PRIVATE_DECLARE_MEMBER(Entity)
		};
	};
};

#endif // ENTITY_H

